home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / bbs / mfm_111b.zip / MFMCOPY.PAS < prev    next >
Pascal/Delphi Source File  |  1992-01-07  |  2KB  |  65 lines

  1. Unit MfmCopy;
  2.  
  3. Interface
  4.  
  5. Uses
  6.   Dos;
  7.  
  8. Procedure DoFileCopy(FromFileName, ToFileName : PathStr);
  9.  
  10. Implementation
  11.  
  12. Type
  13.   BufPtrType = ^BufRecordType;
  14.   BufRecordType = Record
  15.     Next : BufPtrType;
  16.     Buffer : Array[1..$7FFF] Of Byte;
  17.     NumRead : Word;
  18.   End;
  19. Var
  20.   InFile, OutFile : File;
  21.   NumRead, NumWritten : Word;
  22.   FromFileName, ToFileName : PathStr;
  23.   Current, First, Old : BufPtrType;
  24.   TimeTransfer : LongInt;
  25.  
  26. {========================================================================}
  27. Procedure DoFileCopy(FromFileName, ToFileName : PathStr);
  28.   Begin
  29.     If MaxAvail > SizeOf(Current^.Buffer) Then
  30.     Begin
  31.       Assign(InFile, FromFileName);
  32.       Reset(InFile, 1);
  33.       Assign(OutFile, ToFileName);
  34.       Rewrite(OutFile, 1);
  35.       Repeat
  36.         First := NIL;
  37.         Repeat
  38.           If MaxAvail > SizeOf(Current^.Buffer) Then
  39.           Begin
  40.             Old := Current;
  41.             New(Current);
  42.             If First = NIL Then First := Current Else Old^.Next := Current;
  43.             BlockRead(InFile,Current^.Buffer,SizeOf(Current^.Buffer),NumRead);
  44.           End;
  45.           Current^.NumRead := NumRead;
  46.         Until (NumRead = 0) Or (SizeOf(Current^.Buffer) <> NumRead) Or (MaxAvail < SizeOf(Current^.Buffer));
  47.         Current^.Next := NIL;
  48.         Current := First;
  49.         Repeat
  50.           BlockWrite(OutFile,Current^.Buffer,Current^.NumRead,NumWritten);
  51.           Old := Current;
  52.           NumRead := Current^.NumRead;
  53.           Current := Current^.Next;
  54.           If Old <> NIL Then Dispose(Old);
  55.         Until Current = NIL;
  56.       Until (NumRead < SizeOf(Current^.Buffer)) Or (NumWritten <> NumRead);
  57.       GetFTime(InFile,TimeTransfer); SetFTime(OutFile,TimeTransfer);
  58.       Close(InFile);
  59.       Close(OutFile);
  60.     End;
  61.   End;
  62. {========================================================================}
  63. End.
  64. {========================================================================}
  65.